package com.company.algo.statusMachie;

/**
 为了得到最晚有效时间，我们可以从高位向低位枚举，在保证时间有效的情况下，使得每一位尽可能取最大值。
 因为本题中时间的位数较少，我们依次考虑每一位的规则即可。
 第一位：若第二位的值已经确定，且值落在区间 [4,9] 中时，第一位的值最大只能为 1，否则最大可以为 2；
 第二位：若第一位的值已经确定，且值为 2 时，第二位的值最大为 3，否则为 9；
 第三位：第三位的值的选取与其它位无关，最大为 5；
 第四位：第四位的值的选取与其它位无关，最大为 9
 */
public class latest_time_by_replacing_hidden_digits {
    public String maximumTime(String time) {
        char[] res = time.toCharArray();
        if (res[0] == '?'){
            res[0] = ('4' <= res[1] && res[1] <= '9') ? '1' : '2';
        }
        if (res[1] == '?'){
            res[1] = ('2' == res[0]) ? '3':'9';
        }
        if (res[3] == '?') res[3] = '5';
        if (res[4] == '?') res[4] = '9';
        return String.valueOf(res);
    }

    public static void main(String[] args) {
        latest_time_by_replacing_hidden_digits Main = new latest_time_by_replacing_hidden_digits();
        System.out.println(Main.maximumTime("??:3?"));
    }
}
